﻿namespace Lite.Messaging
{
    using System;

    /// <summary>
    /// A descriptor used as a key for getting or setting values on an IMessage
    /// object.
    /// </summary>
    /// <typeparam name="T">
    /// The type of the values stored against this parameter.
    /// </typeparam>
    public interface IParameter<T>
    {
        /// <summary>
        /// Gets the globally unique identifier for this parameter descriptor.
        /// </summary>
        Guid Id { get; }

        /// <summary>
        /// Gets a user-readable description of this parameter descriptor.
        /// </summary>
        string Name { get; }

        /// <summary>
        /// Gets the default value for parameters of this type.
        /// </summary>
        T DefaultValue { get; }
    }
}